package com.itheima.marking_system.utils.aliyun;

import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.aigc.generation.models.QwenParam;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.MessageManager;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.Constants;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class QianWenChat {
    
    public static String Answers = "";

    /**
     * 使用给定的消息调用并返回生成的结果
     * 
     * 此方法构造了与API交互所需的全部参数，包括设置API密钥、构建消息序列、配置生成参数，
     * 并最终调用生成模型以获取回复结果
     * 
     * @param role 用户输入的消息，用于指定助手的角色，以及生成回复的提示
     * @param question 用户输入的消息，用于生成回复
     * @return GenerationResult 生成模型返回的结果，包含生成的回复或其他相关信息
     * @throws NoApiKeyException 当API密钥未设置时抛出此异常
     * @throws ApiException 当API调用过程中发生错误时抛出此异常
     * @throws InputRequiredException 当输入消息为空或不符合要求时抛出此异常
     */
    public static String callWithMessage(String role,String question) throws NoApiKeyException, ApiException, InputRequiredException
    {
        Answers = "";
        // 设置API密钥，用于调用生成模型服务
        Constants.apiKey="sk-4fa8e370fa9a441e8f3ea1536fdf211b";
        
        // 创建生成对象，用于后续调用生成模型
        Generation gen = new Generation();
        
        // 创建消息管理器，设置最大消息数为10
        MessageManager msgManager = new MessageManager(10);
        
        // 构建系统消息，定义助手的基本角色和初始内容，role参数为用户输入的角色
        Message systemMsg =
                Message.builder().role(Role.SYSTEM.getValue()).content(role).build();
        
        // 构建用户消息，基于用户输入构建，question参数为用户输入的消息
        Message userMsg = Message.builder().role(Role.USER.getValue()).content(question).build();
        
        // 将系统消息和用户消息添加到消息管理器中
        msgManager.add(systemMsg);
        msgManager.add(userMsg);
        
        // 构建Qwen参数对象，配置模型类型、消息序列、结果格式等
        QwenParam param =
                QwenParam.builder().model(Generation.Models.QWEN_TURBO).messages(msgManager.get())
                        .resultFormat(QwenParam.ResultFormat.MESSAGE)
                        .topP(0.8)
                        .enableSearch(true)
                        .build();
        
        // 调用生成模型，获取生成的结果
        GenerationResult result = gen.call(param);
        
        // 打印生成的结果
        System.out.println(result);
        Answers = String.valueOf(result.getOutput().getChoices().get(0));
        System.out.println(Answers);
        // 返回生成的结果
        return Answers;
    }



}